home *** CD-ROM | disk | FTP | other *** search
/ isnet Internet / Isnet Internet CD.iso / prog / hiz / 09 / 09.exe / adynware.exe / perl / lib / site / Win32 / EventLog.pm < prev    next >
Encoding:
Perl POD Document  |  1999-12-28  |  5.2 KB  |  241 lines

  1. package Win32::EventLog;
  2.  
  3.  
  4. $VERSION = '0.01';
  5.  
  6. require Exporter;
  7. require DynaLoader;
  8.  
  9. die "The Win32::Eventlog module works only on Windows NT" if(!Win32::IsWinNT() );
  10.  
  11. @ISA= qw( Exporter DynaLoader );
  12. @EXPORT = qw(
  13.     EVENTLOG_AUDIT_FAILURE
  14.     EVENTLOG_AUDIT_SUCCESS
  15.     EVENTLOG_BACKWARDS_READ
  16.     EVENTLOG_END_ALL_PAIRED_EVENTS
  17.     EVENTLOG_END_PAIRED_EVENT
  18.     EVENTLOG_ERROR_TYPE
  19.     EVENTLOG_FORWARDS_READ
  20.     EVENTLOG_INFORMATION_TYPE
  21.     EVENTLOG_PAIRED_EVENT_ACTIVE
  22.     EVENTLOG_PAIRED_EVENT_INACTIVE
  23.     EVENTLOG_SEEK_READ
  24.     EVENTLOG_SEQUENTIAL_READ
  25.     EVENTLOG_START_PAIRED_EVENT
  26.     EVENTLOG_SUCCESS
  27.     EVENTLOG_WARNING_TYPE
  28. );
  29.  
  30. sub AUTOLOAD {
  31.  
  32.     my($constname);
  33.     ($constname = $AUTOLOAD) =~ s/.*:://;
  34.     $!=0;
  35.     my $val = constant($constname, @_ ? $_[0] : 0);
  36.     if ($! != 0) {
  37.     if ($! =~ /Invalid/) {
  38.         $AutoLoader::AUTOLOAD = $AUTOLOAD;
  39.         goto &AutoLoader::AUTOLOAD;
  40.     }
  41.     else {
  42.         ($pack,$file,$line) = caller;
  43.         die "Your vendor has not defined Win32::EventLog macro $constname, used at $file line $line.";
  44.     }
  45.     }
  46.     eval "sub $AUTOLOAD { $val }";
  47.     goto &$AUTOLOAD;
  48. }
  49.  
  50.  
  51. sub Open
  52. {
  53.     if($#_ < 1){
  54.         die "usage: Open(\$this, \$sourcename[, \$servername])\n";
  55.     }
  56.  
  57.     my ($SourceName, $ServerName)=($_[1],$_[2]);
  58.     my ($handle);
  59.  
  60.  
  61.  
  62.     OpenEventLog($handle, $ServerName, $SourceName);
  63.     $_[0] = {'handle' => $handle,
  64.         'Source' => $SourceName,
  65.         'Computer' => $ServerName };
  66.  
  67.     bless $_[0];
  68. }
  69.  
  70. sub Backup
  71. {
  72.     $self = shift;
  73.     if($#_ != 0){
  74.         die " usage: Backup(Filename)\n";
  75.     }
  76.     local( $FileName )= @_;
  77.     local ($Result);
  78.  
  79.     $Result = BackupEventLog($self->{'handle'},$FileName);
  80.     if(!$Result){
  81.         $!=Win32::GetLastError();
  82.     }
  83.  
  84.     return($Result);
  85.  
  86. }
  87.  
  88. sub Read
  89. {
  90.     $self = shift;
  91.     if($#_ != 2){
  92.         die "usage: Read(flags, RecordOffSet, hashref)\n";
  93.     }
  94.     local( $ReadFlags,$RecordOffSet)=@_;
  95.     local ($Result);
  96.     local ($datalength, $dataoffset, $sid);
  97.     local ($length, $reserved, $recordnumber, $timegenerated, $timewritten, $eventid);
  98.     local ($eventtype, $numstrings, $eventcategory, $reservedflags);
  99.     local ($closingrecordnumber, $stringoffset, $usersidlength, $usersidoffset);
  100.  
  101.  
  102.     $Result = ReadEventLog( $self->{'handle'}, $ReadFlags,
  103.     $RecordOffSet, $header, $source, $computer, $sid, $data, $strings );
  104.  
  105.     ( $length, $reserved, $recordnumber, $timegenerated, $timewritten, $eventid,
  106.           $eventtype, $numstrings, $eventcategory, $reservedflags,
  107.           $closingrecordnumber, $stringoffset, $usersidlength, $usersidoffset,
  108.           $datalength, $dataoffset ) = unpack( 'l6s4l6', $header );
  109.  
  110.  
  111.     $_[2]={         'Source'    =>          $source,
  112.                 'Computer'  =>          $computer,
  113.                 'Length'        =>              $datalength,
  114.                 'Category' =>   $eventcategory,
  115.                 'RecordNumber' =>       $recordnumber,
  116.                 'TimeGenerated' =>      $timegenerated,
  117.                 'Timewritten' =>        $timewritten,
  118.                 'EventID' =>            $eventid,
  119.                 'EventType' =>          $eventtype,
  120.                 'ClosingRecordNumber' => $closingrecordnumber,
  121.                 'Strings' =>            $strings,
  122.                 'Data'  =>                      $data,
  123.             };
  124.  
  125.     if(!$Result){
  126.         $!=Win32::GetLastError();
  127.     }
  128.  
  129.     return($Result);
  130.  
  131. }
  132.  
  133. sub Report
  134. {
  135.     my $self = shift;
  136.     
  137.     if($#_ != 0){
  138.         die "usage: Report( %Event )\n";
  139.     }
  140.  
  141.     local( $EventInfo )= @_;
  142.     local ($Result);
  143.  
  144.     if( ref( $EventInfo)  eq "HASH" ){
  145.  
  146.         local ($length, $reserved, $recordnumber, $timegenerated, $timewritten, $eventid);
  147.         local ($eventtype, $numstrings, $eventcategory, $reservedflags);
  148.         local ($closingrecordnumber, $stringoffset, $usersidlength, $usersidoffset);
  149.         local ($source, $reserved, $data, $strings);
  150.     
  151.         $eventcategory = $EventInfo->{'Category'};
  152.         $source=$self->{'Source'};
  153.         $computer=$self->{'Computer'};
  154.         $length=$EventInfo->{'Length'};
  155.         $recordnumber=$EventInfo->{'RecordNumber'};
  156.         $timegenerated=$EventInfo->{'TimeGenerated'};
  157.         $timewritten=$EventInfo->{'Timewritten'};
  158.         $eventid =$EventInfo->{'EventID'};
  159.         $eventtype=$EventInfo->{'EventType'};
  160.         $closingrecordnumber=$EventInfo->{'ClosingRecordNumber'};
  161.         $strings=$EventInfo->{'Strings'};
  162.         $data=$EventInfo->{'Data'};
  163.  
  164.         $Result = WriteEventLog( $computer,$source, $eventtype, $eventcategory, $eventid, $reserved, $data, $strings);
  165.  
  166.         } 
  167.         else{
  168.             die "Win32::EventLog::Report requires a hash reference as arg 3\n";
  169.         }
  170.  
  171.     if(!$Result){
  172.         $!=Win32::GetLastError();
  173.     }
  174.  
  175.     return($Result);
  176.  
  177.  
  178. }
  179.  
  180. sub GetOldest
  181. {
  182.     my $self=shift;
  183.     local ($Result);
  184.         
  185.     if($#_ != 0){
  186.         die "usage: GetOldest( $scalaref )\n";
  187.     }
  188.  
  189.     $Result = GetOldestEventLogRecord( $self->{'handle'},$_[0]);
  190.     if(!$Result){
  191.         $!=Win32::GetLastError();
  192.     }
  193.  
  194.     return($Result);
  195.  
  196. }
  197.  
  198. sub GetNumber
  199. {
  200.     my $self=shift;
  201.     local ($Result);
  202.  
  203.     if($#_ != 0){
  204.         die "usage: GetNumber( $scalaref )\n";
  205.     }
  206.  
  207.     $Result = GetNumberOfEventLogRecords($self->{'handle'}, $_[0]);
  208.  
  209.     if(!$Result){
  210.         $!=Win32::GetLastError();
  211.     }
  212.  
  213.     return($Result);
  214.  
  215.     
  216. }
  217. sub Clear
  218. {
  219.     my $self=shift;
  220.     local ($Result);
  221.     if($#_ != 0){
  222.         die "usage: Clear( $FileName )\n";
  223.     }
  224.     local( $filename) = @_;
  225.  
  226.     $Result = ClearEventLog($self->{'handle'}, $filename);
  227.  
  228.     if(!$Result){
  229.         $!=Win32::GetLastError();
  230.     }
  231.  
  232.     return($Result);
  233.  
  234. }
  235.  
  236. bootstrap Win32::EventLog;
  237.  
  238.  
  239. 1;
  240. __END__
  241.